package org.abc.uiCore.list
{
	import de.polygonal.ds.DLL;
	
	import flash.display.MovieClip;
	
	import org.abc.uiCore.TimeLineView;
	import org.abc.uiCore.event.TimelineEvent;
	import org.abc.uiCore.vo.ListVo;

	/**
	 * @describe  	可以在flashIDE中自己设置1个item，2个item，3个item，
	 * 				等多种情况下list中显示对象的位置
	 * 				相比MaterialListView，FreedomListView增加了在不同帧上取cp的需求
	 * 				额外需要知道:描述CP的MovieClip对象
	 * 							 需要显示CP的个数(MovieClip对象根据显示个数跳帧)
	 *
	 * @author  	Mr.zheng
	 * @website 	http://blog.sina.com.cn/zihua2007
	 * @time		2011-8-30 16:28
	 */
	public class FreedomListView extends MaterialListView
	{
		protected var _layoutSource:TimeLineView;

		/* public function */
		override public function setParams(listVo:ListVo):void
		{
			_layoutSource=listVo.layoutSource;

			_contain=listVo.contain;
			_prefix=listVo.prefix;

			_CP=listVo.CP;
			_model=listVo.model;
			//原意为：一页显示的个数
			//这里没有多页显示，用做表示个数，用该值决定在_layoutSource的第几帧来取素材
			_pageNum=listVo.pageNum;
			_gap=listVo.gap;
			_align=listVo.align;

			_cpDll=new DLL();
			//素材中的帧标签必须按照这个设置
			_layoutSource.gotoAndStop("frame_" + _pageNum);
			_layoutSource.addEventListener(TimelineEvent.GOTO_LABEL_REACHED, onGotoLabel);

			listVo.dispose();
		}

		/* override function */
		override protected function createCpDll():void
		{
			var cp:AbcCP;
			var mc:MovieClip;
			for (var i:int=0; i < _pageNum; i++)
			{
				/** 将素材中的cpi_CPS绑定到cp中，这里要注意，需要将cp的坐标按照cpi_CPS坐标来赋值 */
				cp=new _CP();
				mc=_layoutSource.getChildByName(_prefix + i + "_CPS") as MovieClip;
				cp.x=mc.x;
				cp.y=mc.y;
				cp.bindView(mc);
				cp.init();
				_layoutSource.addChild(cp);
				_cpDll.append(cp);
			}
		}

		/* private function */
		private function onGotoLabel(e:TimelineEvent):void
		{
			createCpDll(); //创建cp链
			showCp(); //根据cp链来显示
			initModelAndCps(); //初始化model和cp
		}
	}

}
